/*******************************************************************************
 * Copyright (c) 2011 Google, Inc.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Google, Inc. - initial API and implementation
 *******************************************************************************/
package com.zgw.his.emr.widget;

import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;

import com.zgw.his.emr.model.PageRecord;

/**
 * Interface for page in {@link AbstractXmlEditor}.
 */
public interface IPage {
	// //////////////////////////////////////////////////////////////////////////
	//
	// Life cycle
	//
	// //////////////////////////////////////////////////////////////////////////
	/**
	 * Initialize this page for given {@link AbstractXmlEditor}.
	 */
	void initialize(PageRecord record);

	/**
	 * Disposes this page.
	 */
	void dispose();

	/**
	 * Notifies when this page become active or inactive.
	 */
	void setActivate(boolean active);

	// //////////////////////////////////////////////////////////////////////////
	//
	// Page
	//
	// //////////////////////////////////////////////////////////////////////////
	/**
	 * @return the index of this page into multi-page editor.
	 */
	int getPageIndex();

	/**
	 * Sets index of this page into multi-page editor.
	 */
	void setPageIndex(int index);

	// //////////////////////////////////////////////////////////////////////////
	//
	// GUI
	//
	// //////////////////////////////////////////////////////////////////////////
	/**
	 * Creates the {@link Control} for this page.
	 */
	Control createControl(Composite parent);

	/**
	 * @return the {@link Control} of this page.
	 */
	Control getControl();

	// //////////////////////////////////////////////////////////////////////////
	//
	// Presentation
	//
	// //////////////////////////////////////////////////////////////////////////
	/**
	 * @return the display name for this page.
	 */
	String getName();

	/**
	 * @return the display {@link Image} image for this page.
	 */
	Image getImage();
}